你好,我是富士大顆 Aiko
此篇會談到:
在 Rails 專案裡,預設的環境是 development ,也就是你不呼喚轉換環境的特定指令,輸入 $rails s
連到的 http://127.0.0.1:3000/ 就是開發環境的狀態。
總共有 3 個環境:
以上的順序也是比較常見的使用順序。
環境 | 特點/用途 | 資料庫 | 錯誤追蹤 |
---|---|---|---|
development | 即時重新載入更改的程式碼,提供錯誤報告。 | 獨立的資料庫(預設是本地端)。 | 提供俗稱的紅畫面。 |
test | 用於運行自動化測試。 | 獨立的測試資料庫。每次測試運行前,資料庫會被重置。 | 為了不干擾測試結果的閱讀,通常只在失敗時才提供錯誤訊息。 |
production | 實際 user 互動的環境,是最安全的。 | 獨立的資料庫。可以用命名區分 e.g project_prod | 不會公開錯誤訊息,通常會有專門的日誌和監控系統。 |
切換指令只有在 development 要轉 production 的時候。
設定環境變數
設定 RAILS_ENV
環境變數來轉換環境。
$export RAILS_ENV=production
除了使用 RAILS_ENV 環境變數外,也可以在 config/environments/
資料夾中對各個環境進行設定。
這個設定僅在當前有效。也就是說,如果關閉了終端機或開啟了新的終端機視窗,這個設定就會消失。
如果希望這個設定能在未來都保持有效,可以將這個 export 指令加入到 .bashrc(如果使用 Bash)或 .zshrc(如果使用 Zsh)檔案中。這樣,每次開一個新的終端機視窗時,這個設定都會自動載入,也就是每輸入 $rails s
環境預設都會是 production!
啟動伺服器
在啟動 Rails 伺服器時,也可以指定環境。
$rails server -e production
資料庫操作
在執行資料庫相關任務時,也可以指定環境。
$RAILS_ENV=production rails db:migrate
意指完成 production 環境的資料遷徙
Rails Console
進入不同環境的 Rails Console。
$rails console production
想轉成 test 不用輸入類似這個的指令,只要開 Rspec 就可以了!
設定和執行測試環境在不同的測試框架和程式語言中會有所不同。以下是在 Ruby on Rails 中使用 RSpec 和 MiniTest 的一些基本步驟:
安裝 RSpec
在你的 Rails 專案的 Gemfile
中加入以下程式碼:
group :development, :test do
gem 'rspec-rails', '~> 5.0'
end
這邊之所以寫在 development & test 環境是因為在開發環境中執行 rails generate 指令(例如,rails g model、rails g controller 等)時,RSpec 會自動為你生成對應的測試檔案。如果 rspec-rails 僅在 :test 環境中,這些 g 就不會自動幫你加檔案。
然後執行 bundle install
。
初始化 RSpec
在終端機中:
$rails generate rspec:install
這會生成一些初始化檔案和資料夾: spec_helper.rb
和 rails_helper.rb
。
撰寫測試
在 spec
資料夾中撰寫測試,通常會在 spec/models、spec/controllers 等資料夾下撰寫對應的測試。
執行測試
在終端機中:
$rspec
這個指令會自動使用測試環境(Test Environment)。
或者可以執行特定的測試檔案:
rspec spec/models/your_model_spec.rb
查看結果
RSpec 會在終端機中顯示測試結果,不需要啟動伺服器來查看測試結果。
初始化 MiniTest
Rails 預設就包含了 MiniTest,所以不需要另外安裝。
撰寫測試
在 test
資料夾中撰寫測試。
執行測試
在終端機中:
$rails test
或者可以執行特定的測試檔案:
rails test test/models/your_model_test.rb
查看結果
MiniTest 會在終端機中顯示測試結果,同樣也不需要啟動伺服器。
資料庫設定
確任有一個測試用的資料庫,並在 config/database.yml
中進行適當的設定。
FactoryBot 和資料生成
如果使用 FactoryBot 來生成測試資料,記得在 spec/rails_helper.rb
或 test/test_helper.rb
中加入相關設定。使用方法可以詳閱文件!
CI/CD 整合
如果用 CI/CD 工具(如 Jenkins、GitHub Actions、Travis CI 等),記得執行測試的必要步驟。
先寫測試再開發的意思!
是一種軟體開發方法,開發過程會循環以下三個步驟:
這個循環會持續到軟體功能開發完成。
在 Rails 中,最常見的是用 RSpec 和 MiniTest 來進行 TDD。
老師說最大的不同除了是語法上的易讀性,工具比喻起來 RSpec 像是 word ; MiniTest 像是記事本。
下一篇!
直接來寫測試範例!